// 开发环境使用本地代理解决跨域，正式环境域名 coc.zarathusa.vip 请按需更换
const baseUrl = process.env.NODE_ENV === 'development' ? `${location.origin}/api/` : '//coc.zarathusa.vip/'

// 公共请求这里使用fetch
export default function (options) {

  if(!options.url) return new Promise((resolve, reject) => {
    reject({
      name: options.name,
      code: -1,
      data: {},
      msg: '请输入url'
    })
  })

  let reqUrl = baseUrl + options.url
  // 参数格式处理
  options.data ? options.data = JSON.stringify(options.data) : ''
  options.method = options.method || 'GET'
  // get请求请求参数拼接
  if(options.method.toUpperCase() == 'GET' && options.params) {
    let params = ''
    for(let key in options.params) params += `&${key}=${options.params[key]}`
    reqUrl.indexOf('?') == -1 ? reqUrl += params.replace(/&/, '?') : reqUrl += params
  }
  // 默认公共参数
  const obj = Object.assign({
    headers: {
      'Content-Type': 'application/json'
    },
  }, options)

  return new Promise((resolve, reject) => {
    // 请求
    fetch(reqUrl, obj)
    .then(res => res.json())
    .then(res => {
      // 公共逻辑判断，code == 0成功，其他状态失败
      /** 返回参数结构 { code: 0, data: {}, msg: '' }
       * code : number 状态码，0代表成功，其他代表失败，失败信息又msg返回
       * data : * 成功时返回的数据
       * msg : sring 失败的提示信息
       */
      if(res.code == 0) resolve(res)
      else reject(Object.assign({name: options.name}, res))
    }).catch(err => {
      reject(Object.assign({name: options.name}, {msg: err}))
    })
  })
}